package cn.jly.bigdata.spark.core

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * @author lanyangji
 * @date 2019/11/24 10:47
 */
object Spark02_expr3 {

  def main(args: Array[String]): Unit = {

    // local模式

    // 创建 SparkConf 对象
    // 这边也自定义了本地的模式（分配多少个cpu）
    // app id
    val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("wordCount")

    // 创建spark上下文对象，SparkContext -> sc
    val sc = new SparkContext(sparkConf)

    // mapPartitionsWithIndex算子
    val seqRDD: RDD[Int] = sc.makeRDD(1 to 20, 2)

    // f: (Int, Iterator[T]) => Iterator[U]
    // num为分区号，需要用到分区号的时候，可以使用这个API
    // val indexRDD: RDD[(Int, Int)] = seqRDD.mapPartitionsWithIndex((num, datas)=> datas.map((num, _)))

    // 一般遇到多个参数的，为了正确匹配，习惯的用法是模式匹配
    val indexRDD: RDD[(String, Int)] = seqRDD.mapPartitionsWithIndex {
      case (num, datas) => datas.map(("分区号: " + num, _))
    }

    indexRDD.collect.foreach(println)
  }
}
